package com.senchen.rabbitconfig;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * 功能: 一句话简要概括功能
 * 作者: 小静VS静
 * 时间: 2020-10-31
 * 逻辑:TODO 在这里描述功能的大体逻辑
 * 版本:1.0
 * 修订:
 */
@Configuration
public class Config {
    //配置队列
    @Bean("testqueueone")
    public Queue gettopicQueue(){
        Queue testqueueone = QueueBuilder.durable("testqueueone").build();
        return testqueueone;
    }
    //配置交换机
    @Bean("testexchange")
    public Exchange getTopicExchange(){
        //ExchangeBuilder 构建交换机
        //topicExchange 需要绑定路由键 可以进行
        //fannoutExchange 不需要路由键 适合订阅群发
        //headersExchange 实际开发用不到
        //directExchange 必须完全匹配路由键 需要绑定路由键
        //durable 是否持久化
        //build 构建
        return ExchangeBuilder.topicExchange("testexchangeone").durable(true).build();
    }


    @Bean
    //@Qualifier 表明了哪个实现类才是我们所需要的
    //@Autowired默认按照类型匹配注入bean，如果有多个实现类，搭配@Qualifier(“实现类名称”)表明注入的是哪一个实现类的bean：
    public Binding getExechanagequeueBindingthree(@Qualifier("testqueueone") Queue queue,@Qualifier("testexchange") Exchange exchange){
        //将队列绑定在路由键上 #代表 参数可有可无 *参数必须有的
        return BindingBuilder.bind(queue).to(exchange).with("#.atm").noargs();
    }

}
